var LoginAjax = {
    // PC端爱思登录专用
    APPID: '3755',
    get: function (url, params, headers, successMethod, errorMethod) {
        Object.defineProperty(params, 'member.appId', {
            value: LoginAjax.APPID,
            writable: true,
            enumerable: true,
            configurable: true
        });
        $.ajax({
            url: url,
            data: params,
            headers: headers,
            timeout: 10000,
            type: 'get',
            xhrFields: {
                withCredentials: true // 允许跨域请求时携带COOKIE
            },
            dataType: 'json',
            success: function (data) {
                successMethod(data);
            },
            error: function (errorObj) {
                errorMethod(errorObj.message);
            }
        });
    },
    post: function (url, data, headers, successMethod, errorMethod) {
        Object.defineProperty(data, 'member.appId', {
            value: LoginAjax.APPID,
            writable: true,
            enumerable: true,
            configurable: true
        });
        $.ajax({
            url: url,
            data: data,
            headers: headers,
            timeout: 10000,
            type: 'post',
            xhrFields: {
                withCredentials: true // 允许跨域请求时携带COOKIE
            },
            dataType: 'json',
            success: function (data) {
                console.log(data);
                successMethod(data);
            },
            error: function (errorObj) {
                errorMethod(errorObj.message);
            }
        });
    },
    /**
     * 发送短信
     * @param phone 手机号
     * @param token 用户名密码登录token
     * @param code 微信code
     * @param source 0:注册短信,1:手机后登录短信,2:微信登录绑定手机号短信,3:找回密码短信,4:用户名密码登录绑定手机号短信
     * @param successMethod 成功时要执行的方法
     * @param errorMethod 失败时要执行的方法
     */
    sendVerifyCode: function (phone, token, code, source, successMethod, errorMethod) {
        var data = {
            'member.phone': phone
        };
        if (token != undefined & token != 'undefined' & token != null & token != 'null' & token != '') {
            Object.defineProperty(data, 'member.token', {
                value: token,
                writable: true,
                enumerable: true,
                configurable: true
            });
        }
        if (code != undefined & code != 'undefined' & code != null & code != 'null' & code != '') {
            Object.defineProperty(data, 'member.weixin', {
                value: code,
                writable: true,
                enumerable: true,
                configurable: true
            });
        }
        if (source != undefined & source != 'undefined' & source != null & source != 'null' & source != '') {
            Object.defineProperty(data, 'member.source', {
                value: source,
                writable: true,
                enumerable: true,
                configurable: true
            });
        }
        LoginAjax.post(loginUrl.userUrl + '/pcuserv3_sendSms.action', data, {}, function (res) {
            if (res.code == 1) {
                Login.showManualSendCode(res.data[0].phone, res.data[0].code);
                return;
            }
            if (res.code != 0) {
                return errorMethod(res.message);
            }
            successMethod();
        }, errorMethod);
    },
    /**
     * 使用手机号验证码登录
     * @param phone 手机号
     * @param code 验证码
     * @param cid 渠道ID
     * @param successMethod 成功时要执行的方法
     * @param errorMethod 失败时要执行的方法
     */
    loginByPhoneCode: function (phone, code, cid, successMethod, errorMethod) {
        LoginAjax.post(loginUrl.userUrl + '/pcuserv3_loginBySms.action', {
            'member.phone': phone,
            'member.code': code
        }, {}, function (res) {
            if (res.code != 0) {
                return errorMethod(res.message);
            }
            LoginAjax.i5Login(res.data[0].json, '', successMethod, errorMethod);
        }, errorMethod);
    },
    /**
     * 手机号密码登录
     * @param phone 用户名
     * @param password 密码
     * @param successMethod 成功时要执行的方法
     * @param errorMethod 失败时要执行的方法
     */
    loginByPhonePassWord: function (phone, password, successMethod, errorMethod) {
        LoginAjax.post(loginUrl.userUrl + '/pcuserv3_loginByPhone.action', {
            'member.phone': phone,
            'member.password': password
        }, {}, function (res) {
            if (res.code == 21) {
                $('.imgVerifyCode').show();
                $('#imgCode').attr('src', loginUrl.userUrl + '/pcuserv3_verifyCode.action' + '?member.username=' + phone + '&member.source=' + 1 + '&tempid=' + Math.random())
                    .attr('account', phone).attr('source', 1);
                return;
            }
            if (res.code != 0) {
                return errorMethod(res.message);
            }
            LoginAjax.i5Login(res.data[0].json, '', successMethod, errorMethod);
        }, errorMethod);
    },
    /**
     * 用户名密码登录
     * @param username 用户名
     * @param password 密码
     * @param successMethod 成功时要执行的方法
     * @param errorMethod 失败时要执行的方法
     */
    loginByUserNamePassword: function (username, password, successMethod, errorMethod) {
        LoginAjax.post(loginUrl.userUrl + '/pcuserv3_loginByUsername.action', {
            'member.username': username,
            'member.password': password
        }, {}, function (res) {
            if (res.code == 21) {
                $('.imgVerifyCode').show();
                $('#imgCode').attr('src', loginUrl.userUrl + '/pcuserv3_verifyCode.action' + '?member.username=' + username + '&member.source=' + 0 + '&tempid=' + Math.random())
                    .attr('account', username).attr('source', 0);
                return;
            }
            // code=0 为成功，code=97 微信存在但未绑定手机号，去绑定手机号界面, code=10 微信第一次登录，去绑定手机号， 其他为失败，失败显示message里面的内容
            if (res.code == 97 | res.code == 10) {
                errorMethod(res.message);
                Login.showBindPhoneView(res.data[0].token, undefined, 4);
                return;
            }
            if (res.code != 0) {
                return errorMethod(res.message);
            }
            LoginAjax.i5Login(res.data[0].json, '', successMethod, errorMethod);
        }, errorMethod);
    },
    /**
     * 修改密码校验短信验证码
     * @param phone 手机号
     * @param code 验证码
     * @param successMethod 成功时要执行的方法
     * @param errorMethod 失败时要执行的方法
     */
    verifyPhoneCode: function (phone, code, successMethod, errorMethod) {
        LoginAjax.post(loginUrl.userUrl + '/pcuserv3_checkSmsValidateCode.action', {
            'member.phone': phone,
            'member.code': code
        }, {}, function (res) {
            if (res.code != 0) {
                return errorMethod(res.message);
            }
            successMethod();
        }, errorMethod);
    },
    /**
     * 重置密码
     * @param phone 手机号
     * @param password 新密码
     * @param successMethod 成功时要执行的方法
     * @param errorMethod 失败时要执行的方法
     */
    resetPassword: function (phone, password, successMethod, errorMethod) {
        LoginAjax.post(loginUrl.userUrl + '/pcuserv3_resetPasswordByPhone.action', {
            'member.phone': phone,
            'member.password': password
        }, {}, function (res) {
            if (res.code != 0) {
                return errorMethod(res.message);
            }
            successMethod();
        }, errorMethod);
    },
    /**
     * 获取微信扫码所需信息
     * @param successMethod 成功时要执行的方法
     * @param errorMethod 失败时要执行的方法
     */
    getWXAppid: function (successMethod, errorMethod) {
        LoginAjax.post(loginUrl.userUrl + '/pcuserv3_weixin.action', {}, {}, function (res) {
            if (res.code != 0) {
                return errorMethod(res.message);
            }
            successMethod(res.data[0]);
        }, errorMethod);
    },
    /**
     * 微信登录
     * @param wxCode 微信code码
     * @param state
     * @param successMethod 成功时要执行的方法
     * @param errorMethod 失败时要执行的方法
     */
    loginByWX: function (wxCode, state, successMethod, errorMethod) {
        LoginAjax.post(loginUrl.userUrl + '/pcuserv3_loginByWeixin.action', {
            'member.weixin': wxCode,
            state: state
        }, {}, function (res) {
            // code=0 为成功，code=97 微信存在但未绑定手机号，去绑定手机号界面, code=10 微信第一次登录，去绑定手机号， 其他为失败，失败显示message里面的内容
            if (res.code == 97 | res.code == 10) {
                errorMethod(res.message);
                Login.showBindPhoneView(undefined, wxCode, 2);
                return;
            }
            if (res.code != 0) {
                return errorMethod(res.message);
            }
            LoginAjax.i5Login(res.data[0].json, '', successMethod, errorMethod);
        }, errorMethod);
    },
    /**
     * 微信登录绑定手机号
     * @param wxCode 微信code码
     * @param phone 手机号
     * @param code 验证码
     * @param successMethod 成功时要执行的方法
     * @param errorMethod 失败时要执行的方法
     */
    wxBindPhone: function (wxCode, phone, code, successMethod, errorMethod) {
        LoginAjax.post(loginUrl.userUrl + '/pcuserv3_bindPhoneForWeixin.action', {
            'member.weixin': wxCode,
            'member.phone': phone,
            'member.code': code
        }, {}, function (res) {
            if (res.code != 0) {
                return errorMethod(res.message);
            }
            LoginAjax.i5Login(res.data[0].json, '', successMethod, errorMethod);
        }, errorMethod);
    },

    /**
     * 用户名密码登录绑定手机号
     * @param token 登录token
     * @param phone 手机号
     * @param code 验证码
     * @param successMethod 成功时要执行的方法
     * @param errorMethod 失败时要执行的方法
     */
    usernameBindPhone: function (token, phone, code, successMethod, errorMethod) {
        LoginAjax.post(loginUrl.userUrl + '/pcuserv3_bindPhoneForUsername.action', {
            'member.token': token,
            'member.phone': phone,
            'member.code': code
        }, {}, function (res) {
            if (res.code != 0) {
                return errorMethod(res.message);
            }
            LoginAjax.i5Login(res.data[0].json, '', successMethod, errorMethod);
        }, errorMethod);
    },
    /**
     * 验证用户手机号是否已主动发送验证码
     * @param phone 手机号
     * @param successMethod 成功时要执行的方法
     * @param errorMethod 失败时要执行的方法
     */
    verifySendPhoneMessage: function (phone, successMethod, errorMethod) {
        LoginAjax.post(loginUrl.userUrl + '/user_phoneCode.action', {
            'member.phone': phone
        }, {}, function (res) {
            if (res.code != 0) {
                return errorMethod(res.message);
            }
            successMethod(res.data[0].code);
        }, errorMethod);
    },
    /**
     * 校验图形验证码
     * @param account 账号
     * @param code 验证码
     * @param source  0:根据用户名和密码登录 1:根据手机号和密码登录
     * @param successMethod 成功时要执行的方法
     * @param errorMethod 失败时要执行的方法
     */
    verifyImgCode: function (account, code, source, successMethod, errorMethod) {
        LoginAjax.post(loginUrl.userUrl + '/pcuserv3_checkVerifyCode.action', {
            'member.username': account,
            'member.code': code,
            'member.source': source
        }, {}, function (res) {
            if (res.code != 0) {
                return errorMethod(res.message);
            }
            successMethod(res.data);
        }, errorMethod);
    },

    /**
     * 需要先i4登录成功，拿到 json 后再调用此接口
     * i5登录
     * @param json i4登录成功后返回的json值
     * @param cid 渠道ID
     * @param successMethod 成功时要执行的方法
     * @param errorMethod 失败时要执行的方法
     */
    i5Login: function (json, cid, successMethod, errorMethod) {
        LoginAjax.get(loginUrl.i5UserUrl + '/user/center/checkI4User', {
            'member.platform': 2,
            json: json
        }, {}, function (res) {
            if (res.code != 0) {
                return errorMethod(res.data);
            }
            // i5 用json
            localStorage.setItem('token', res.data.json);
            // i4 用user-json
            localStorage.setItem('user-token', res.data.i4json);
            zz_send(JSON.stringify({
                event: 408,
                json: localStorage.getItem('token'),
                'user-json': localStorage.getItem('user-token')
            }));
            successMethod();
            Login.clearView();
            window.location.href = 'chargingMessage.html';
        }, errorMethod);
    }
};
